/// 应用常量配置
/// 
/// 🎯 统一管理所有服务层常量
/// 按照服务分类组织，便于维护和查找
class Constants {
  // ==================== AppConfigService 相关常量 ====================
  
  /// 深色模式设置键
  static const String storageKeyDarkMode = 'dark_mode';
  
  /// 语言设置键
  static const String storageKeyLanguage = 'language';
  
  /// 首次运行标记键
  static const String storageKeyFirstRun = 'first_run';
  
  /// 应用版本存储键
  static const String storageKeyAppVersion = 'app_version';
  
  /// 默认语言代码
  static const String defaultLanguage = 'zh_CN';
  
  // ==================== DioService 相关常量 ====================
  
  /// 主要API服务器地址
  static const String apiBaseUrl = 'http://116.62.108.84:8888';
  
  /// 默认连接超时时间（毫秒）
  static const int defaultConnectTimeout = 10000;
  
  /// 默认接收超时时间（毫秒）
  static const int defaultReceiveTimeout = 10000;
  
  /// 默认发送超时时间（毫秒）
  static const int defaultSendTimeout = 10000;
  
  /// 用户代理字符串
  static const String defaultUserAgent = 'Flutter-App/1.0.0';
  
  /// Google公共DNS（用于网络检查）
  static const String googleDns = '8.8.8.8';
  
  /// 百度公共DNS（用于网络检查）
  static const String baiduDns = '114.114.114.114';
  
  // HTTP请求头常量
  
  /// HTTP Content-Type 头
  static const String httpHeaderContentType = 'Content-Type';
  
  /// HTTP Accept 头
  static const String httpHeaderAccept = 'Accept';
  
  /// HTTP User-Agent 头
  static const String httpHeaderUserAgent = 'User-Agent';
  
  /// HTTP Authorization 头
  static const String httpHeaderAuthorization = 'Authorization';
  
  /// HTTP X-Request-ID 头
  static const String httpHeaderRequestId = 'X-Request-ID';
  
  /// JSON Content-Type 值
  static const String httpContentTypeJson = 'application/json; charset=utf-8';
  
  /// JSON Accept 值
  static const String httpAcceptJson = 'application/json';
  
  /// Bearer 令牌前缀
  static const String httpBearerPrefix = 'Bearer ';
  
  // 错误代码常量
  
  /// SSL证书错误代码
  static const String errorCodeSsl = 'SSL_ERROR';
  
  /// 未授权状态码
  static const int httpStatusUnauthorized = 401;
  
  /// HTTP状态码范围上限
  static const int httpStatusMaxValid = 600;
  
  // API路径模式常量
  
  /// 刷新令牌API路径模式
  static const String apiPathRefreshPattern = '/refresh';
  
  /// 不需要认证token的API路径列表（白名单）
  static const List<String> noAuthRequiredPaths = [
    '/auth/login',
    '/auth/register',
    '/auth/logout',
    '/auth/refresh',
    '/auth/captcha',
    '/auth/forgot-password',
    '/auth/reset-password',
    '/public/',
    '/open/',
  ];
  
  // Token刷新相关常量
  
  /// 默认访问令牌过期时间（秒）- 1小时
  static const int defaultAccessTokenExpiresIn = 3600;
  
  /// 默认刷新令牌过期时间（秒）- 1天
  static const int defaultRefreshTokenExpiresIn = 86400;
  
  /// 假设令牌获取时间偏移（毫秒）
  static const int fallbackTokenObtainedOffset = 3300000;
  
  // ==================== UserService 相关常量 ====================
  
  /// 用户访问令牌存储键
  static const String storageKeyUserToken = 'user_token';
  
  /// 用户刷新令牌存储键
  static const String storageKeyRefreshToken = 'refresh_token';
  
  /// 完整Token模型存储键
  static const String storageKeyTokenModel = 'token_model';
  
  /// 用户ID存储键
  static const String storageKeyUserId = 'user_id';
  
  /// 用户名存储键
  static const String storageKeyUsername = 'username';
  
  /// 用户信息存储键
  static const String storageKeyUserInfo = 'user_info';
  
  /// 最后登录时间存储键
  static const String storageKeyLastLoginTime = 'last_login_time';
  
  /// 登录信息过期天数
  static const int loginExpirationDays = 30;
  
  // ==================== PackageInfoService 相关常量 ====================
  
  /// 未知应用名称
  static const String unknownAppName = 'Unknown App';
  
  /// 默认包名
  static const String defaultPackageName = 'com.example.unknown';
  
  /// 默认版本号
  static const String defaultVersion = '1.0.0';
  
  /// 默认构建号
  static const String defaultBuildNumber = '1';
  
  /// 默认应用名称
  static const String defaultAppName = 'Flutter App';
  
  /// 标准项目应用名称
  static const String standardProjectAppName = 'Flutter Standard Project';
  
  // ==================== PermissionService 相关常量 ====================
  
  /// 权限服务标签
  static const String permissionServiceTag = 'PermissionService';
  
  // ==================== 测试域名 ====================
  
  /// 用于DNS解析测试的域名列表
  static const List<String> testDomains = [
    'baidu.com',
    'google.com',
    'shiguangbiaoju.com',
  ];
}
